Search K
Appearance
Appearance
| 项目 | 容器名 | 端口 | 备注 |
|---|---|---|---|
hmall | hmall | 8080 | 黑马商城后端 API 入口 |
hmall-portal | nginx | 18080 | 黑马商城用户端入口 |
hmall-admin | nginx | 18081 | 黑马商城管理端入口 |
mysql | mysql | 3306 | 数据库 |
hmall: 商城的后端代码hmall-portal:商城用户端的前端代码hmall-admin:商城管理端的前端代码hmall 项目是一个 maven 聚合项目,使用 IDEA 打开 hmall 项目,查看项目结构如图:
❯ tree hamll -L 1
├── .idea
├── hm-common # 通用工具模块
├── hm-service # 业务模块
├── logs
├── src
└── pom.xml我们要部署的就是其中的 hm-service,其中的配置文件采用了多环境的方式:
application.ymlapplication-dev.yml 部署到开发环境的配置application-local.yml 本地运行时的配置查看 application.yaml,会发现其中的 JDBC 地址并未写死,而是读取变量:
server:
port: 8080
spring:
application:
name: hm-service
profiles:
active: dev
datasource:
url: jdbc:mysql://${hm.db.host}:3306/hmall?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: ${hm.db.pw}这两个变量在 application-dev.yml 和 application-local.yml 中并不相同:
# application-dev.yml
db:
host: mysql
pw: 123
# application-local.yml
db:
host: localhost
pw: 123456在 dev 开发环境(也就是 Docker 部署时)采用了 mysql 作为地址,刚好是我们的 mysql 容器名,只要两者在一个网络,就一定能互相访问。
之前删除了 mysql 容器的需要重新上传 mysql 文件夹到到虚拟机的
hmall目录
将文件上传到 hmall 目录
❯ mkcd hmall
❯ tree -L 2 .
.
├── Dockerfile
├── hm-service.jar
└── mysql # 数据库目录
├── conf
├── data
└── init
4 directories, 2 files运行 mysql 容器。
❯ docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v ./mysql/data:/var/lib/mysql \
-v ./mysql/conf:/etc/mysql/conf.d \
-v ./mysql/init:/docker-entrypoint-initdb.d \
mysql
zsh: correct './mysql/conf:/etc/mysql/conf.d' to './mysql/conf/etc/mysql/conf.d' [nyae]? n
0912ee2dd460814b121d244de2aa154320a0366d085a3e6ba7db7ff2a0bc65a3将 mysql 容器添加到 hmall 网络并设置别名为 db。
❯ docker network connect hmall mysql --alias db查看 hmall 网络中的容器。
❯ dkNinc hmall
0912ee2dd460814b121d244de2aa154320a0366d085a3e6ba7db7ff2a0bc65a3: mysql将 hm-service 目录下的 Dockerfile 和 hm-service/target 目录下的 hm-service.jar 一起上传到虚拟机的 hmall 目录
❯ tree -L 2 .
.
├── Dockerfile
├── hm-service.jar
└── mysql
├── conf
├── data
└── init
4 directories, 2 files查看 Dockerfile 文件内容是否正确。
❯ cat Dockerfile
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝 jar 包
COPY hm-service.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]构建 hmall 镜像。省略 tag,默认为 latest。
❯ docker build -t hmall .
[+] Building 2.3s (8/8) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.3s
=> => transferring dockerfile: 298B 0.1s
=> [internal] load .dockerignore 0.2s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/openjdk:11.0-jre-buster 0.7s
=> [1/3] FROM docker.io/library/openjdk:11.0-jre-buster@sha256:569ba9252ddd693a29d39e81b3123481f308eb6d529827a40c93710444e421 0.0s
=> [internal] load build context 0.5s
=> => transferring context: 68.24MB 0.4s
=> CACHED [2/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone 0.0s
=> [3/3] COPY hm-service.jar /app.jar 0.2s
=> exporting to image 0.4s
=> => exporting layers 0.3s
=> => writing image sha256:af4b5ab8d9fccf5efa559b714e733b43934275ffa2b68b5ace7a9167ac273a63 0.0s
=> => naming to docker.io/library/hmall 0.0s查看本地镜像。
❯ dk images
REPOSITORY TAG IMAGE ID CREATED SIZE
hmall latest af4b5ab8d9fc 1 minutes ago 365MB
mysql latest a3b6608898d6 4 weeks ago 596MB创建并运行 hmall 容器,并加入 hmall 网络。
❯ dk run -d --name hmall --network hmall -p 8080:8080 hmall
916083d7d274599380295f709611ef21b2eaadc21adcf148109583567c8e305f查看 hmall 网络中是否包含 hmall 容器。只有 hmall 容器和 mysql 容器在同一个网络中才能通过容器名访问 mysql
❯ dkNinc hmall
0912ee2dd460814b121d244de2aa154320a0366d085a3e6ba7db7ff2a0bc65a3: mysql
916083d7d274599380295f709611ef21b2eaadc21adcf148109583567c8e305f: hmall查看搜素相关接口。
❯ curl localhost:8080/search/list?pageNo=1&pageSize=2
{"total":"88475","pages":"4424","list":[{"id":"100002624512","name":"......"}]}